Dans le monde du Devops, on veut tout automatiser et tout versionner.

Et pour ce faire on utilise le moins possible la souris.

Si vous voulez dessiner des diagrammes d’architecture, autant le coder.

Diagrams est une librairie de diagram as code en Python (il y en a une en Go aussi).

Des outils comme graphviz, ou plantuml par exemple, sont les pionniers, mais la librairie diagrams a un peu modernisé le genre.

https://diagrams.mingrammer.com/

Installation

On peut faire très simple avec apt (remplacez apt par dnf ou tout autre package manager) :

sudo apt install graphviz python3-pip
python3 -m pip install diagrams

La librairie contient 4 objets de base :

  • Diagram : Il s’agit du niveau le plus haut qui définit le fichier en lui-même.
  • Cluster : Un ensemble de Nodes regroupés.
  • Node : Un élément de votre diagramme souvent représenté par un icône.
  • Edge : Flèches qui relient les Nodes.

Diagrams

Les diagrammes ont un nom et des options :

from diagrams import Diagram
with Diagram("My diagram as code", outformat=["png", "pdf"]):
    ...

Options :

  • outformat : Le format de sortie parmi (jpg, png, dot ou pdf), par défaut png
  • direction :
  • show : si définit à true, permet d’ouvrir le fichier quand le code Python est exécuté.
  • filename : définit le nom du fichier (si non indiqué, le fichier prend comme nom le titre du diagramme)

Nodes

Les nodes sont les objets de votre diagramme. Vous devez importer les objets dont vous avez besoin puis les appeler :

from diagrams import Diagram
from diagrams.gcp.storage import Storage

with Diagram("My diagram"):
    Storage("My bucket")

Vous devrez mettre votre objet dans une variable si vous voulez le lier par la suite avec un Edge.

    my_gcs = Storage("My bucket")

La liste des objets existant est ici mais vous pouvez aussi faire vos propres nodes.

Clusters

Les clusters permettent de regouper les objets :

from diagrams import Diagram, Cluster 
from diagrams.onprem.compute import Server

with Diagram("My diagram"):
    with Cluster("On premise"):
        srv=Server("On premise server")
    with Cluster("GCP"):
        bucket=Storage("Bucket on GCP")

Edges

Les liens se font de cette manière :

srv1 >> srv2
# ou
srv1 << srv2

On peut annoter le lien :

srv1 >> Edge(label="https") >> srv2

Un exemple complet

Avec tout ça, vous avez tout ce qu’il vous faut pour faire du Diagram as Code :

from diagrams import Diagram, Cluster, Edge
from diagrams.onprem.compute import Server
from diagrams.gcp.storage import Storage

with Diagram("My diagram"):
    with Cluster("On-premise"):
        srv1=Server("My 1st server")
        srv2=Server("My 2nd server")
        srv1 >> Edge(label="sftp") >> srv2
    with Cluster("GCP"):
        bucket1=Storage("Bucket")
    srv2 >> bucket1

Ce qui donne :

Diagramme